//:  v.book.read.tip.memento.Notepad.java
package v.book.read.tip.memento;

import java.io.Serializable;

import com.bruceeckel.util.SerializeHelper;

/**
 * 记事本
 * <p>应该是 onchange 的时候保存
 * 这里的序列化相当于 Caretaker 的角色
 * @author 小败
 */
public class Notepad implements Serializable {

    private static final long serialVersionUID = 540800333097626342L;
    
    private int version = 0;

    private String textarea;
    
    public Notepad() {
        this.save();
    }

    public String getTextarea() {
        return textarea;
    }

    public void setTextarea(String textarea) {
        this.textarea = textarea;
    }
    
    /**
     * 你好 -》2
     * 我好 -》3
     */
    public synchronized void save() {
        SerializeHelper.serializeObject(this, String.valueOf(++version));
    }
    
    public synchronized void undo() {
        if (version > 0) {
            Notepad notepad = (Notepad) SerializeHelper.deserializeObject(String.valueOf(--version));
            setTextarea(notepad.getTextarea());
        }
    }
    
    @Override
    public String toString() {
        return version + ":" + getTextarea();
    }
    
    public static void main(String[] args) {
        Notepad notepad = new Notepad();
        notepad.setTextarea("你好");
        notepad.save();
        System.out.println(notepad);
        notepad.setTextarea("我好");
        notepad.save();
        System.out.println(notepad);
        notepad.setTextarea("大家好");
        notepad.save();
        System.out.println(notepad);
        notepad.undo();
        System.out.println(notepad);
        notepad.undo();
        System.out.println(notepad);
        notepad.setTextarea("fuck you!");
        notepad.save();
        System.out.println(notepad);
        notepad.undo();
        System.out.println(notepad);
    }
    
}

